package com.ruoyi.datam.service.impl;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

import com.ruoyi.common.core.constant.UserConstants;
import com.ruoyi.common.core.domain.base.datam.MiMainchanB;
import com.ruoyi.common.core.domain.base.datam.WiMainB;
import com.ruoyi.common.core.domain.base.datam.WiOrganB;
import com.ruoyi.common.core.utils.StringUtils;
import com.ruoyi.common.core.utils.business.BusinessUtils;
import com.ruoyi.common.core.utils.zeroFill.ZeroFillUtils;
import com.ruoyi.common.security.utils.SecurityUtils;
import com.ruoyi.datam.mapper.MiMainchanBMapper;
import com.ruoyi.datam.mapper.WiMainBMapper;
import com.ruoyi.datam.mapper.WiOrganBMapper;
import com.ruoyi.datam.service.IWiMainBService;
import com.ruoyi.system.api.domain.SysUser;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

/**
 * 水管员信息登记Service业务层处理
 *
 * @author hwd
 * @date 2023-02-16
 */
@Service
public class WiMainBServiceImpl implements IWiMainBService {
    @Autowired
    private WiMainBMapper wiMainBMapper;
    @Autowired
    private WiOrganBMapper wiOrganBMapper;
    @Autowired
    private MiMainchanBMapper miMainchanBMapper;

    /**
     * 查询水管员信息登记
     *
     * @param mainCd 水管员信息登记主键
     * @return 水管员信息登记
     */
    @Override
    public WiMainB selectWiMainBByMainCd(String mainCd) {
        MiMainchanB miMainchanB = new MiMainchanB();
        miMainchanB.setMainCd(mainCd);
        miMainchanB.setCurStatus("0");
        List<MiMainchanB> miMainchanBS = miMainchanBMapper.selectMiMainchanBList(miMainchanB);
        String[] chanCds = new String[miMainchanBS.size()];
        for (int i = 0; i < miMainchanBS.size(); i++) {
            chanCds[i] = miMainchanBS.get(i).getChanCd();
        }
        WiMainB wiMainB = wiMainBMapper.selectWiMainBByMainCd(mainCd);
        wiMainB.setChanCd(chanCds);
        return wiMainB;
    }

    /**
     * 查询水管员信息登记列表
     *
     * @param wiMainB 水管员信息登记
     * @return 水管员信息登记
     */
    @Override
    public List<WiMainB> selectWiMainBList(WiMainB wiMainB) {
        List<WiMainB> wiMainBS = wiMainBMapper.selectWiMainBList(wiMainB);
        for (WiMainB vo : wiMainBS) {
            WiOrganB wiOrganB = wiOrganBMapper.selectWiOrganBByOrgCd(vo.getOrgCd());
            if (wiOrganB != null) {
                vo.setOrgNm(wiOrganB.getOrgNm());
            }
        }
        return wiMainBS;
    }

    /**
     * 新增水管员信息登记
     *
     * @param wiMainB 水管员信息登记
     * @return 结果
     */
    @Override
    public int insertWiMainB(WiMainB wiMainB) {
        //新增後向sysUser表中新增
        List<WiMainB> wiMainBS = wiMainBMapper.selectWiMainBList(null);
        wiMainB.setMainCd("MAI654322" + ZeroFillUtils.zeroFill(wiMainBS.size() + 1, "0000"));
        wiMainB.setMainOper(SecurityUtils.getUserId() + "");
        if (wiMainB.getChanCd().length > 0) {
            //先刪除之前的
            miMainchanBMapper.deleteMiMainchanBByMainCd(wiMainB.getMainCd());
            for (String chanCd : wiMainB.getChanCd()) {
                MiMainchanB miMainchanB = new MiMainchanB();
                miMainchanB.setMainCd(wiMainB.getMainCd());
                miMainchanB.setChanCd(chanCd);
                miMainchanB.setRightOper(SecurityUtils.getUserId() + "");
                miMainchanB.setRightDate(new Date());
                miMainchanBMapper.insertMiMainchanB(miMainchanB);
            }
        }
        int i = wiMainBMapper.insertWiMainB(wiMainB);
        return i;
    }

    /**
     * 修改水管员信息登记
     *
     * @param wiMainB 水管员信息登记
     * @return 结果
     */
    @Override
    public int updateWiMainB(WiMainB wiMainB) {
        if (wiMainB.getChanCd().length > 0) {
            //先刪除之前的
            miMainchanBMapper.deleteMiMainchanBByMainCd(wiMainB.getMainCd());
            for (String chanCd : wiMainB.getChanCd()) {
                MiMainchanB miMainchanB = new MiMainchanB();
                miMainchanB.setMainCd(wiMainB.getMainCd());
                miMainchanB.setChanCd(chanCd);
                miMainchanB.setRightOper(SecurityUtils.getUserId() + "");
                miMainchanB.setRightDate(new Date());
                miMainchanBMapper.insertMiMainchanB(miMainchanB);
            }
        }
        return wiMainBMapper.updateWiMainB(wiMainB);
    }

    /**
     * 批量删除水管员信息登记
     *
     * @param mainCds 需要删除的水管员信息登记主键
     * @return 结果
     */
    @Override
    public int deleteWiMainBByMainCds(String[] mainCds) {
        return wiMainBMapper.deleteWiMainBByMainCds(mainCds);
    }

    /**
     * 删除水管员信息登记信息
     *
     * @param mainCd 水管员信息登记主键
     * @return 结果
     */
    @Override
    public int deleteWiMainBByMainCd(String mainCd) {
        return wiMainBMapper.deleteWiMainBByMainCd(mainCd);
    }

    @Override
    public String checkUserNameUnique(SysUser user) {
        Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
        String userId2 = wiMainBMapper.checkUserNameUnique(user.getUserName());
        if (StringUtils.isNotBlank(userId2) && Long.parseLong(userId2) != userId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    @Override
    public String checkPhoneUnique(SysUser user) {
        Long userId = StringUtils.isNull(user.getUserId()) ? -1L : user.getUserId();
        String userId2 = wiMainBMapper.checkPhoneUnique(user.getPhonenumber());
        if (StringUtils.isNotBlank(userId2) && Long.parseLong(userId2) != userId.longValue())
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }

    @Override
    public int insertUser(SysUser sysUser) {
        int i = wiMainBMapper.insertUser(sysUser);
        String userId2 = wiMainBMapper.checkUserNameUnique(sysUser.getUserName());
        wiMainBMapper.insertUserRole(userId2,"3");
        return i;
    }

    @Override
    public String geMainCd(String mainNm) {
        return wiMainBMapper.geMainCd(mainNm);
    }
}
